#ifndef SESSIONFRIENDAREA_H
#define SESSIONFRIENDAREA_H

#include <QWidget>
#include <QScrollArea> // 通常用于超出显示区域大小的情形
#include <QLabel>
#include <QEvent> // QEvent 是所有事件类的基类
#include <QMouseEvent> // QMouseEvent 是用来表示鼠标相关事件的类
#include <QEnterEvent> // QEnterEvent 特别表示鼠标进入某个窗口或按键，但并未按下任何鼠标按钮时所产生的事件
#include <QPaintEvent>


enum ItemType
{
    SESSION_ITEM,
    FRIEND_ITEM
};

// 整个 会话/好友 区域
class SessionFriendArea : public QScrollArea
{
    Q_OBJECT
public:
    explicit SessionFriendArea(QWidget *parent = nullptr);
    void AddItem(ItemType type, const QString& id, const QIcon& avatar, const QString& name, const QString& text);

private:
    QWidget* container;
    // 将 container 设置为 QScrollArea 的视图部件，
    // 当 container 内的 layout 超出可视范围，触发滚轮
signals:
};


// Item -- 会话信息 / 好友信息
class SessionFriendItem : public QWidget
{
    Q_OBJECT
public:
    SessionFriendItem(QWidget* owner, const QIcon& avatar, const QString& name, const QString& text);

    void paintEvent(QPaintEvent* event) override;

    // 鼠标事件通过重载 QWidget 中的函数，以实现功能
    void mousePressEvent(QMouseEvent* event) override;
    void select();
    void enterEvent(QEnterEvent* event) override;
    void leaveEvent(QEvent* event) override;


    // // 鼠标点击事件
    // void MouseClickEvent(QMouseEvent* event);
    // void select();
    // // 鼠标悬置事件
    // void MouseHoverEvent(QEnterEvent* event);
    // // 鼠标移开事件
    // void MouseMoveEvent(QEvent* event);

private:
    QWidget* owner; // 指向当前 Item 所属 SessionFriendArea 的 container
    bool selected = false; // 记录当前 Item 是否被选中

protected:
    QLabel* message_label; // 会话列表：显示最新一条消息；好友列表：显示好友个性签名
};

class SessionItem : public SessionFriendItem
{
    Q_OBJECT
public:
    SessionItem(QWidget* owner, const QString& id, const QIcon& avatar, const QString& name, const QString& text);

private:
    QString session_id; // 当前会话 id
    QString text; // 最后一条文本预览
};

class FriendItem : public SessionFriendItem
{
    Q_OBJECT
public:
    FriendItem(QWidget* owner, const QString& id, const QIcon& avatar, const QString& name, const QString& description);

private:
    QString user_id; // 好友用户 id

};



#endif // SESSIONFRIENDAREA_H
